%Prueba de generación de la misma imagen con distintos pulsos
%%Inicialización
close all
clear variables
clc
addpath(genpath('../'))
cm=0;
cM=0;
retardo=0;
downsampleFlag=0;
DistInic=100;
for i=2:2
    %% Pre-procesamiento y ploteos
    str=['../../Data240811/DataSet' num2str(i)];
    load(str)
    pulso=wave;
    if (size(pulso,1)==1)&&(downsampleFlag==1) %Para poder hacer el downsample
        pulso(2,1:size(pulso,2))=0;
    end

c=1500; %Velocidad de propagacion en m/s
d=(11*10^-3)/(31); %Distancia entre sensores
if retardo==0 %Me olvidé de guardarlo
    retardo=(2*DistInic/1000)/c;
end
    

ResX=128;
ResZ=4096;



%---------------------------------------------
%Pre-acondicionamiento de la señal
%---------------------------------------------
data=RF3;
[M,N]=size(data);
%Ecualizo la señal para todos los canales
invE=1./sqrt(sum(data.*data));
%invE=1./mean(abs(data));
invE=invE./invE(1);
data=data.*(ones(M,1)*invE);


%Filtrado
[B,A]=butter(10,[0.05 0.3]);
data=filter(B,A,data); %Introduce atraso por fase, arreglar!
if downsampleFlag==1
    data=downsample(data,2); 
    pulso=downsample(pulso,2);
    efs=esf*10^6/2;
    rfs=rsf*10^6/2;
else
    efs=esf*10^6;
    rfs=rsf*10^6;
end
[M,N]=size(data);


%---------------------------------------------
%Data a priori - Ploteo
%---------------------------------------------

figure
subplot(2,2,1)
hold on
title('Pulso enviado')
imagesc([1,size(pulso,2)],[1,size(pulso,1)]/efs,pulso)
axis tight
text(16,0, ['Foco: ' num2str(Foco) 'mm'],...
          'HorizontalAlignment','center',... 
          'BackgroundColor',[.7 .9 .7]);
ylabel('Tiempo (s)')
xlabel('Canales')
hold off
subplot(2,2,2)
hold on
title('Pulso esperado en el caso de sup. plana a 5cm')
eco=fakeEco(pulso,d,0.05,1500,efs);
imagesc([1,size(eco,2)],[1,size(eco,1)]/efs,eco)
axis tight
Teco=2*0.05/1500;
axis([ 1 32 (Teco-0.075*10^-5) (Teco+0.075*10^-5)])
ylabel('Tiempo (s)')
xlabel('Canales')
hold off

subplot(2,2,3)
hold on
title('Pulso recibido')
imagesc([1,size(RF3,2)],[1,size(RF3,1)]/rfs,RF3)
axis tight
Teco=find(sum(RF3,2)==max(sum(RF3,2)),1)/rfs;
axis([ 1 32 (Teco-0.075*10^-5) (Teco+0.075*10^-5)])
ylabel('Tiempo (s)')
xlabel('Canales')
hold off
subplot(2,2,4)
hold on
title('Pulso recibido y acondicionado')
imagesc([1,size(data,2)],[1,size(data,1)]/rfs,data)
axis tight
Teco=find(sum(data,2)==max(sum(data,2)),1)/rfs;
axis([ 1 32 (Teco-0.075*10^-5) (Teco+0.075*10^-5)])
ylabel('Tiempo (s)')
xlabel('Canales')
hold off


figure
mesh(RF3)

% ---------------------------------------------
%  PROCESAMIENTO
%  --------------------------------------------

%% SOBRE EL ECO FICTO
%--------------------------------------------
%eco=zeros(round(efs*0.06/c),N);
%Teco=round(efs*0.05/c);
%eco(Teco:(Teco+size(pulso,1)-1),:)=pulso;
[Df,Xf,Zf,auxiliar]=BeamFormingActivo2(pulso,eco,d,efs,efs,0,c,0.04,0.06,0,d*32,32,512);
 figure
 hold on
 title('Beam Forming activo sobre el eco ficto')
 imagesc(Xf,Zf,abs(Df)')
 hold off


%% VERSIÓN PASIVA
%-------------------------------------------------
% [D1,X1,Z1]=BeamForming(data,d,rsf,c,0.015/1500);
% figure
% imshow(D1/max(max(D1)))
% figure
% hold on
% title('Beam Forming pasivo con redondeo')
% imagesc(X1,Z1,abs(D1)')
% hold off

%pulso=[zeros(1,N);ones(1,N)];
%% Versión activa

 [D,X,Z]=BeamFormingActivo2(pulso,data,d,efs,rfs,retardo,c,0.10,0.18,0,d*32,ResX,ResZ);
 %if cM==0
     cM=max(max(abs(D)));
 %end
 %if cm==0
     cm=min(min(abs(D)));
 %end
 figure
 hold on
 title(['Beam Forming activo, módulo, F=' num2str(Foco)])
 imagesc(X,Z,abs(D)')
 caxis([cm cM])
 hold off
  figure
 hold on
 title(['Beam Forming activo, parte real, F=' num2str(Foco)])
 imagesc(X,Z,real(D)')
 caxis([-cM cM])
 hold off
   figure
 hold on
 title(['Beam Forming activo, parte imag, F=' num2str(Foco)])
 imagesc(X,Z,imag(D)')
 caxis([-cM cM])
 hold off
 figure
 hold on
 title(['Beam Forming activo, módulo, F=' num2str(Foco)])
 mesh(X,Z,abs(D)')
 %caxis([cm cM])
 hold off
%  savestr=[str 'SinFiltro' num2str(ResX) 'x' num2str(ResZ)];
%  savestr=[str num2str(ResX) 'x' num2str(ResZ)];
%  save(savestr,'X','Z','D');
end